blob: 9a849dcc8c00fe9d53646d82cbeab23419d6b8c4 [file] [log] [blame]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001= Gerrit Code Review - Access Controls
Shawn O. Pearce4b122b82009-02-18 18:22:14 -08002
3Access controls in Gerrit are group based. Every user account is a
4member of one or more groups, and access and privileges are granted
Matt Fischer620255a2011-03-22 14:28:23 -05005to those groups. Access rights cannot be granted to individual
6users.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -08007
8
Edwin Kempin4bf01962014-04-16 16:47:10 +02009[[system_groups]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -080010== System Groups
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080011
Anita Kuno178f64b2014-04-22 18:52:28 -040012Gerrit comes with the following system groups:
Khai Do4245e6f2013-10-11 18:14:31 +020013
Khai Do4245e6f2013-10-11 18:14:31 +020014* Anonymous Users
15* Change Owner
Khai Do4245e6f2013-10-11 18:14:31 +020016* Project Owners
17* Registered Users
18
19The system groups are assigned special access and membership management
Jonathan Nieder2b2d62b2014-05-07 19:40:58 -070020privileges.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080021
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +020022
Fredrik Luthander8fa3d262011-11-07 17:04:01 +010023[[anonymous_users]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -080024=== Anonymous Users
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080025
26All users are automatically a member of this group. Users who are
27not signed in are a member of only this group, and no others.
28
29Any access rights assigned to this group are inherited by all users.
30
31Administrators and project owners can grant access rights to this
32group in order to permit anonymous users to view project changes,
33without requiring sign in first. Currently it is only worthwhile
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +010034to grant `Read` access to this group as Gerrit requires an account
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080035identity for all other operations.
36
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +020037
Fredrik Luthander8fa3d262011-11-07 17:04:01 +010038[[project_owners]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -080039=== Project Owners
Fredrik Luthander8fa3d262011-11-07 17:04:01 +010040
41Access rights assigned to this group are always evaluated within the
42context of a project to which the access rights apply. These rights
43therefore apply to all the users who are owners of this project.
44
45By assigning access rights to this group on a parent project Gerrit
46administrators can define a set of default access rights for
Fredrik Luthanderea13ca52011-12-29 11:36:48 +010047<<category_owner,project owners>>. Child projects inherit these
Fredrik Luthander8fa3d262011-11-07 17:04:01 +010048access rights where they are resolved to the users that own the child
49project. Having default access rights for
Fredrik Luthanderea13ca52011-12-29 11:36:48 +010050<<category_owner,project owners>> assigned on a parent project may
Fredrik Luthander8fa3d262011-11-07 17:04:01 +010051avoid the need to initially configure access rights for
52newly created child projects.
53
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +020054
Khai Do4245e6f2013-10-11 18:14:31 +020055[[change_owner]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -080056=== Change Owner
Khai Do4245e6f2013-10-11 18:14:31 +020057
58Access rights assigned to this group are always evaluated within the
59context of a change to which the access rights apply. These rights
60therefore apply to the user who is the owner of this change.
61
62It is typical to assign a label to this group, allowing the change
63owner to vote on his change, but not actually cause it to become
64approved or rejected.
65
Fredrik Luthander8fa3d262011-11-07 17:04:01 +010066[[registered_users]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -080067=== Registered Users
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080068
69All signed-in users are automatically a member of this group (and
Fredrik Luthander54abc352012-01-20 16:18:41 +010070also <<anonymous_users,'Anonymous Users'>>, see above).
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080071
72Any access rights assigned to this group are inherited by all
73users as soon as they sign-in to Gerrit. If OpenID authentication
74is being employed, moving from only 'Anonymous Users' into this
75group is very easy. Caution should be taken when assigning any
76permissions to this group.
77
Dave Borowitz01c1b1f2013-02-27 13:49:04 -080078It is typical to assign `Code-Review -1..+1` to this group,
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080079allowing signed-in users to vote on a change, but not actually
80cause it to become approved or rejected.
81
82Registered users are always permitted to make and publish comments
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +010083on any change in any project they have `Read` access to.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -080084
85
Jonathan Nieder2b2d62b2014-05-07 19:40:58 -070086== Predefined Groups
87
88Predefined groups differs from system groups by the fact that they
89exist in the ACCOUNT_GROUPS table (like normal groups) but predefined groups
90are created on Gerrit site initialization and unique UUIDs are assigned
91to those groups. These UUIDs are different on different Gerrit sites.
92
93Gerrit comes with two predefined groups:
94
95* Administrators
96* Non-Interactive Users
97
98
99[[administrators]]
100=== Administrators
101
Edwin Kempin17287422016-04-07 08:44:39 +0200102This is a predefined group, created on Gerrit site initialization, that
103has the capability link:access-control.html#capability_administrateServer[
104'Administrate Server'] assigned.
Jonathan Nieder2b2d62b2014-05-07 19:40:58 -0700105
Edwin Kempin17287422016-04-07 08:44:39 +0200106It is a normal Gerrit group without magic. This means if you remove
107the 'Administrate Server' capability from it, its members are no longer
108Gerrit administrators, despite the group name. The group may also be
109renamed.
Jonathan Nieder2b2d62b2014-05-07 19:40:58 -0700110
111
112[[non-interactive_users]]
113=== Non-Interactive Users
114
115This is the Gerrit "batch" identity. The capabilities
116link:access-control.html#capability_priority['Priority BATCH'] and
117link:access-control.html#capability_streamEvents['Stream Events']
118are assigned to this predefined group on Gerrit site creation.
119
120The members of this group are not expected to perform interactive
121operations on the Gerrit web front-end.
122
123However, sometimes such a user may need a separate thread pool in
124order to prevent it from grabbing threads from the interactive users.
125
126These users live in a second thread pool, which separates operations
127made by the non-interactive users from the ones made by the interactive
128users. This ensures that the interactive users can keep working when
129resources are tight.
130
131
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800132== Account Groups
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800133
134Account groups contain a list of zero or more user account members,
135added individually by a group owner. Any user account listed as
136a group member is given any access rights granted to the group.
137
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800138Every group has one other group designated as its owner. Users who
139are members of the owner group can:
140
Fredrik Luthander8fa3d262011-11-07 17:04:01 +0100141* Add users and other groups to this group
142* Remove users and other groups from this group
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800143* Change the name of this group
144* Change the description of this group
145* Change the owner of this group, to another group
146
147It is permissible for a group to own itself, allowing the group
148members to directly manage who their peers are.
149
150Newly created groups are automatically created as owning themselves,
151with the creating user as the only member. This permits the group
152creator to add additional members, and change the owner to another
153group if desired.
154
155It is somewhat common to create two groups at the same time,
156for example `Foo` and `Foo-admin`, where the latter group
157`Foo-admin` owns both itself and also group `Foo`. Users who
158are members of `Foo-admin` can thus control the membership of
159`Foo`, without actually having the access rights granted to `Foo`.
160This configuration can help prevent accidental submits when the
161members of `Foo` have submit rights on a project, and the members of
162`Foo-admin` typically do not need to have such rights.
163
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200164
Thanh Ha6eed43f2013-04-11 21:03:55 -0400165[[ldap_groups]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800166== LDAP Groups
Thanh Ha6eed43f2013-04-11 21:03:55 -0400167
168LDAP groups are Account Groups that are maintained inside of your
169LDAP instance. If you are using LDAP to manage your groups they will
170not appear in the Groups list. However you can use them just like
171regular Account Groups by prefixing your group with "ldap/" in the
172Access Control for a project. For example "ldap/foo-project" will
173add the LDAP "foo-project" group to the access list.
174
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800175
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800176== Project Access Control Lists
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800177
lincolnfa7bdd32010-04-22 14:23:05 -0300178A system wide access control list affecting all projects is stored in
Shawn O. Pearcea0631822011-06-14 11:18:18 -0700179project "`All-Projects`". This inheritance can be configured
lincolnfa7bdd32010-04-22 14:23:05 -0300180through link:cmd-set-project-parent.html[gerrit set-project-parent].
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800181
182Per-project access control lists are also supported.
183
184Users are permitted to use the maximum range granted to any of their
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800185groups on a label. For example, a user is a member of `Foo Leads`, and
186the following ACLs are granted on a project:
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800187
Karsten Dambekalnsa7f72a22011-03-25 14:21:59 +0100188[options="header"]
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800189|===================================================
190|Group |Reference Name |Label |Range
191|Anonymous Users |refs/heads/* |Code-Review|-1..+1
192|Registered Users|refs/heads/* |Code-Review|-1..+2
193|Foo Leads |refs/heads/* |Code-Review|-2..0
194|===================================================
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800195
196Then the effective range permitted to be used by the user is
197`-2..+2`, as the user is a member of all three groups (see above
198about the system groups) and the maximum range is chosen (so the
199lowest value granted to any group, and the highest value granted
200to any group).
201
Nico Sallembienee6eaf02010-02-01 13:24:49 -0800202Reference-level access control is also possible.
203
204Permissions can be set on a single reference name to match one
205branch (e.g. `refs/heads/master`), or on a reference namespace
Jonathan Nieder5758f182015-03-30 11:28:55 -0700206(e.g. `+refs/heads/*+`) to match any branch starting with that
Sebastian Schuberth7bcfbaf2016-05-23 14:06:03 +0200207prefix. So a permission with `+refs/heads/*+` will match all of
208`refs/heads/master`, `refs/heads/experimental`, `refs/heads/release/1.0` etc.
Nico Sallembienee6eaf02010-02-01 13:24:49 -0800209
Shawn O. Pearce6d6d4512010-07-15 11:42:34 -0700210Reference names can also be described with a regular expression
Edwin Kempina2bf0832011-09-08 14:23:30 +0200211by prefixing the reference name with `^`. For example
212`^refs/heads/[a-z]{1,8}` matches all lower case branch names
Shawn O. Pearce6d6d4512010-07-15 11:42:34 -0700213between 1 and 8 characters long. Within a regular expression `.`
214is a wildcard matching any character, but may be escaped as `\.`.
Magnus Bäcke5611832011-02-02 08:57:15 +0100215The link:http://www.brics.dk/automaton/[dk.brics.automaton library]
216is used for evaluation of regular expression access control
217rules. See the library documentation for details on this
Doug Claare852eb32016-03-18 14:43:28 -0700218particular regular expression flavor. One quirk is that the
219shortest possible pattern expansion must be a valid ref name:
220thus `^refs/heads/.*/name` will fail because `refs/heads//name`
221is not a valid reference, but `^refs/heads/.+/name` will work.
Shawn O. Pearce6d6d4512010-07-15 11:42:34 -0700222
Edwin Kempinad6f15b2016-05-04 18:20:05 +0200223References can have the user name or the sharded account ID of the
224current user automatically included, creating dynamic access controls
225that change to match the currently logged in user. For example to
226provide a personal sandbox space to all developers,
227`+refs/heads/sandbox/${username}/*+` allows the user 'joe' to use
228'refs/heads/sandbox/joe/foo'. The sharded account ID can be used to
229give users access to their user branch in the `All-Users` repository,
230for example `+refs/users/${shardeduserid}+` is resolved to
231'refs/users/23/1011123' if the account ID of the current user is
232`1011123`.
Shawn O. Pearce6d6d4512010-07-15 11:42:34 -0700233
Nico Sallembienee6eaf02010-02-01 13:24:49 -0800234When evaluating a reference-level access right, Gerrit will use
Nico Sallembiena78a37c2010-05-04 11:49:12 -0700235the full set of access rights to determine if the user
236is allowed to perform a given action. For example, if a user is a
237member of `Foo Leads`, they are reviewing a change destined for
238the `refs/heads/qa` branch, and the following ACLs are granted
239on the project:
Nico Sallembienee6eaf02010-02-01 13:24:49 -0800240
Karsten Dambekalnsa7f72a22011-03-25 14:21:59 +0100241[options="header"]
Fredrik Luthander54abc352012-01-20 16:18:41 +0100242|===============================================================
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800243|Group |Reference Name|Label |Range |Exclusive
244|Registered Users |refs/heads/* |Code-Review| -1..+1 |
245|Foo Leads |refs/heads/* |Code-Review| -2..+2 |
246|QA Leads |refs/heads/qa |Code-Review| -2..+2 |
Fredrik Luthander54abc352012-01-20 16:18:41 +0100247|===============================================================
Nico Sallembienee6eaf02010-02-01 13:24:49 -0800248
Nico Sallembiena78a37c2010-05-04 11:49:12 -0700249Then the effective range permitted to be used by the user is
250`-2..+2`, as the user's membership of `Foo Leads` effectively grant
251them access to the entire reference space, thanks to the wildcard.
252
253Gerrit also supports exclusive reference-level access control.
254
255It is possible to configure Gerrit to grant an exclusive ref level
256access control so that only users of a specific group can perform
Fredrik Luthander54abc352012-01-20 16:18:41 +0100257an operation on a project/reference pair. This is done by ticking
258the exclusive flag when setting the permission for the
259`refs/heads/qa` branch.
Nico Sallembiena78a37c2010-05-04 11:49:12 -0700260
261For example, if a user who is a member of `Foo Leads` tries to
262review a change destined for branch `refs/heads/qa` in a project,
263and the following ACLs are granted:
264
Karsten Dambekalnsa7f72a22011-03-25 14:21:59 +0100265[options="header"]
Fredrik Luthander54abc352012-01-20 16:18:41 +0100266|==============================================================
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800267|Group |Reference Name|Label |Range |Exclusive
268|Registered Users|refs/heads/* |Code-Review| -1..+1 |
269|Foo Leads |refs/heads/* |Code-Review| -2..+2 |
270|QA Leads |refs/heads/qa |Code-Review| -2..+2 |X
Fredrik Luthander54abc352012-01-20 16:18:41 +0100271|==============================================================
Nico Sallembiena78a37c2010-05-04 11:49:12 -0700272
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800273Then this user will not have `Code-Review` rights on that change,
Nico Sallembiena78a37c2010-05-04 11:49:12 -0700274since there is an exclusive access right in place for the
275`refs/heads/qa` branch. This allows locking down access for a
276particular branch to a limited set of users, bypassing inherited
277rights and wildcards.
278
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800279In order to grant the ability to `Code-Review` to the members of
Nico Sallembiena78a37c2010-05-04 11:49:12 -0700280`Foo Leads`, in `refs/heads/qa` then the following access rights
281would be needed:
282
Karsten Dambekalnsa7f72a22011-03-25 14:21:59 +0100283[options="header"]
Fredrik Luthander54abc352012-01-20 16:18:41 +0100284|==============================================================
285|Group |Reference Name|Category |Range |Exclusive
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800286|Registered Users|refs/heads/* |Code-Review| -1..+1 |
287|Foo Leads |refs/heads/* |Code-Review| -2..+2 |
288|QA Leads |refs/heads/qa |Code-Review| -2..+2 |X
289|Foo Leads |refs/heads/qa |Code-Review| -2..+2 |
Fredrik Luthander54abc352012-01-20 16:18:41 +0100290|==============================================================
Nico Sallembiena78a37c2010-05-04 11:49:12 -0700291
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200292
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800293=== OpenID Authentication
Shawn O. Pearcea2299662009-02-25 14:34:40 -0800294
295If the Gerrit instance is configured to use OpenID authentication,
296an account's effective group membership will be restricted to only
297the `Anonymous Users` and `Registered Users` groups, unless *all*
298of its OpenID identities match one or more of the patterns listed
Shawn O. Pearced7c026d2009-08-05 20:11:22 -0700299in the `auth.trustedOpenID` list from `gerrit.config`.
Shawn O. Pearcea2299662009-02-25 14:34:40 -0800300
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200301
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800302=== All Projects
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800303
Shawn O. Pearcea0631822011-06-14 11:18:18 -0700304Any access right granted to a group within `All-Projects`
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800305is automatically inherited by every other project in the same
306Gerrit instance. These rights can be seen, but not modified,
307in any other project's `Access` administration tab.
308
Fredrik Luthanderd9960882011-11-08 01:42:19 +0100309Only members of the groups with the `Administrate Server` capability
310may edit the access control list for `All-Projects`. By default this
311capability is given to the group `Administrators`, but can be given
312to more groups.
Shawn O. Pearcee2c2a222010-05-11 13:43:45 -0700313
314Ownership of this project cannot be delegated to another group.
315This restriction is by design. Granting ownership to another
316group gives nearly the same level of access as membership in
317`Administrators` does, as group members would be able to alter
Fredrik Luthanderd9960882011-11-08 01:42:19 +0100318permissions for every managed project including global capabilities.
Shawn O. Pearcee2c2a222010-05-11 13:43:45 -0700319
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200320
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800321=== Per-Project
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800322
Fredrik Luthanderda867882011-12-21 18:28:40 +0100323The per-project ACL is evaluated before the global `All-Projects` ACL,
324permitting some limited override capability to project owners. This
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100325behavior is generally only useful on the `Read` category when
326granting 'DENY' within a specific project to deny a group access.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800327
328
Fredrik Luthander98030252012-04-13 11:01:22 +0200329[[references]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800330== Special and magic references
Fredrik Luthander98030252012-04-13 11:01:22 +0200331
332The reference namespaces used in git are generally two, one for branches and
333one for tags:
334
335* +refs/heads/*+
336* +refs/tags/*+
337
338However, every reference under +refs/*+ is really available, and in Gerrit this
339opportunity for giving other refs a special meaning is used. In Gerrit they
340are sometimes used as magic/virtual references that give the push to Gerrit a
341special meaning.
342
343
344[[references_special]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800345=== Special references
Fredrik Luthander98030252012-04-13 11:01:22 +0200346
347The special references have content that's either generated by Gerrit or
348contains important project configuration that Gerrit needs. When making
349changes to these references, Gerrit will take extra precautions to verify the
350contents compatibility at upload time.
351
352
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800353==== refs/changes/*
Fredrik Luthander98030252012-04-13 11:01:22 +0200354
355Under this namespace each uploaded patch set for every change gets a static
356reference in their git. The format is convenient but still intended to scale to
357hundreds of thousands of patch sets. To access a given patch set you will
358need the change number and patch set number.
359
Yuxuan 'fishy' Wangd85b6872013-11-15 11:47:46 -0800360--
Fredrik Luthander98030252012-04-13 11:01:22 +0200361'refs/changes/'<last two digits of change number>/
362 <change number>/
363 <patch set number>
Yuxuan 'fishy' Wangd85b6872013-11-15 11:47:46 -0800364--
Fredrik Luthander98030252012-04-13 11:01:22 +0200365
366You can also find these static references linked on the page of each change.
367
368
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800369==== refs/meta/config
Fredrik Luthander98030252012-04-13 11:01:22 +0200370
Matt Baker3a40c6d2013-11-26 21:01:17 -0700371This is where the Gerrit configuration of each project resides. This
Fredrik Luthander98030252012-04-13 11:01:22 +0200372branch contains several files of importance: +project.config+, +groups+ and
Matt Baker3a40c6d2013-11-26 21:01:17 -0700373+rules.pl+. Together they control access and behavior during the change
Fredrik Luthander98030252012-04-13 11:01:22 +0200374review process.
375
376
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800377==== refs/meta/dashboards/*
Fredrik Luthander98030252012-04-13 11:01:22 +0200378
379There's a dedicated page where you can read more about
380link:user-dashboards.html[User Dashboards].
381
382
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800383==== refs/notes/review
Fredrik Luthander98030252012-04-13 11:01:22 +0200384
385Autogenerated copy of review notes for all changes in the git. Each log entry
386on the refs/notes/review branch also references the patch set on which the
387review is made. This functionality is provided by the review-notes plugin.
388
389
390[[references_magic]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800391=== Magic references
Fredrik Luthander98030252012-04-13 11:01:22 +0200392
393These are references with added functionality to them compared to a regular
394git push operation.
395
Edwin Kempin4bf01962014-04-16 16:47:10 +0200396[[refs_for]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800397==== refs/for/<branch ref>
Fredrik Luthander98030252012-04-13 11:01:22 +0200398
399Most prominent is the `refs/for/<branch ref>` reference which is the reference
400upon which we build the code review intercept before submitting a commit to
401the branch it's uploaded to.
402
403Further documentation on how to push can be found on the
404link:user-upload.html#push_create[Upload changes] page.
405
406
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800407==== refs/publish/*
Fredrik Luthander98030252012-04-13 11:01:22 +0200408
Jonathan Nieder5758f182015-03-30 11:28:55 -0700409`+refs/publish/*+` is an alternative name to `+refs/for/*+` when pushing new changes
Fredrik Luthander98030252012-04-13 11:01:22 +0200410and patch sets.
411
412
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800413==== refs/drafts/*
Fredrik Luthander98030252012-04-13 11:01:22 +0200414
Jonathan Nieder5758f182015-03-30 11:28:55 -0700415Push to `+refs/drafts/*+` creates a change like push to `+refs/for/*+`, except the
Fredrik Luthander98030252012-04-13 11:01:22 +0200416resulting change remains hidden from public review. You then have the option
417of adding individual reviewers before making the change public to all. The
418change page will have a 'Publish' button which allows you to convert individual
419draft patch sets of a change into public patch sets for review.
420
Jonathan Nieder5758f182015-03-30 11:28:55 -0700421To block push permission to `+refs/drafts/*+` the following permission rule can
David Ostrovsky07ddca52014-01-21 22:51:47 +0100422be configured:
423
Michael Ochmannb99feab2016-07-06 14:10:22 +0200424----
David Ostrovsky07ddca52014-01-21 22:51:47 +0100425 [access "refs/drafts/*"]
426 push = block group Anonymous Users
Michael Ochmannb99feab2016-07-06 14:10:22 +0200427----
David Ostrovsky07ddca52014-01-21 22:51:47 +0100428
Fredrik Luthander98030252012-04-13 11:01:22 +0200429
Fredrik Luthander5ccf2e42013-05-08 01:06:25 +0200430[[access_categories]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800431== Access Categories
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800432
Fredrik Luthander5ccf2e42013-05-08 01:06:25 +0200433Gerrit has several permission categories that can be granted to groups
434within projects, enabling functionality for that group's members.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800435
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200436
Fredrik Luthander69236de2013-05-09 14:50:39 +0200437
Chad Horohoe029c85a2012-06-07 16:10:14 -0400438[[category_abandon]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800439=== Abandon
Chad Horohoe029c85a2012-06-07 16:10:14 -0400440
441This category controls whether users are allowed to abandon changes
442to projects in Gerrit. It can give permission to abandon a specific
443change to a given ref.
444
Aaron Gableb9b4ba92016-11-08 14:44:36 -0800445The uploader of a change, anyone granted the <<category_owner,`Owner`>>
446permission at the ref or project level, and anyone granted the
447<<capability_administrateServer,`Administrate Server`>>
448permission can also Abandon changes.
449
David Pursehousec795eb12013-07-05 14:20:28 +0900450This also grants the permission to restore a change if the user also
451has link:#category_push[push permission] on the change's destination
452ref.
Chad Horohoe35ced0a2012-06-27 19:20:34 -0400453
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200454
Fredrik Luthandere9eeeea2011-12-08 16:45:32 +0100455[[category_create]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800456=== Create Reference
Fredrik Luthandere9eeeea2011-12-08 16:45:32 +0100457
458The create reference category controls whether it is possible to
459create new references, branches or tags. This implies that the
460reference must not already exist, it's not a destructive permission
David Pursehouse221d4f62012-06-08 17:38:08 +0900461in that you can't overwrite or remove any previously existing
Fredrik Luthandere9eeeea2011-12-08 16:45:32 +0100462references (and also discard any commits in the process).
463
464It's probably most common to either permit the creation of a single
465branch in many gits (by granting permission on a parent project), or
466to grant this permission to a name pattern of branches.
467
468This permission is often given in conjunction with regular push
469branch permissions, allowing the holder of both to create new branches
470as well as bypass review for new commits on that branch.
471
David Pursehouse221d4f62012-06-08 17:38:08 +0900472To push lightweight (non-annotated) tags, grant
Jonathan Nieder5758f182015-03-30 11:28:55 -0700473`Create Reference` for reference name `+refs/tags/*+`, as lightweight
Edwin Kempin94db6b62016-09-02 14:37:17 +0200474tags are implemented just like branches in Git. To push a lightweight
475tag on a new commit (commit not reachable from any branch/tag) grant
Edwin Kempin439dd1f2016-09-05 16:25:12 +0200476`Push` permission on `+refs/tags/*+` too. The `Push` permission on
477`+refs/tags/*+` also allows fast-forwarding of lightweight tags.
Fredrik Luthandere9eeeea2011-12-08 16:45:32 +0100478
479For example, to grant the possibility to create new branches under the
480namespace `foo`, you have to grant this permission on
Jonathan Nieder5758f182015-03-30 11:28:55 -0700481`+refs/heads/foo/*+` for the group that should have it.
Fredrik Luthandere9eeeea2011-12-08 16:45:32 +0100482Finally, if you plan to grant each user a personal namespace in
483where they are free to create as many branches as they wish, you
484should grant the create reference permission so it's possible
485to create new branches. This is done by using the special
486`${username}` keyword in the reference pattern, e.g.
Jonathan Nieder5758f182015-03-30 11:28:55 -0700487`+refs/heads/sandbox/${username}/*+`. If you do, it's also recommended
Fredrik Luthandere9eeeea2011-12-08 16:45:32 +0100488you grant the users the push force permission to be able to clean up
489stale branches.
490
Edwin Kempin4666bd92016-09-07 11:43:59 +0200491[[category_delete]]
492=== Delete Reference
493
494The delete reference category controls whether it is possible to delete
495references, branches or tags. It doesn't allow any other update of
496references.
497
498Deletion of references is also possible if `Push` with the force option
499is granted, however that includes the permission to fast-forward and
500force-update references to exiting and new commits. Being able to push
501references for new commits is bad if bypassing of code review must be
502prevented.
503
Fredrik Luthandere9eeeea2011-12-08 16:45:32 +0100504
Fredrik Luthander8f430f12011-12-27 13:40:43 +0100505[[category_forge_author]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800506=== Forge Author
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100507
508Normally Gerrit requires the author and the committer identity
509lines in a Git commit object (or tagger line in an annotated tag) to
510match one of the registered email addresses of the uploading user.
Fredrik Luthander8f430f12011-12-27 13:40:43 +0100511This permission allows users to bypass parts of that validation, which
512may be necessary when mirroring changes from an upstream project.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100513
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100514Permits the use of an unverified author line in commit objects.
515This can be useful when applying patches received by email from
5163rd parties, when cherry-picking changes written by others across
517branches, or when amending someone else's commit to fix up a minor
518problem before submitting.
Fredrik Luthander8f430f12011-12-27 13:40:43 +0100519
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100520By default this is granted to `Registered Users` in all projects,
521but a site administrator may disable it if verified authorship
522is required.
523
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100524
Fredrik Luthander8f430f12011-12-27 13:40:43 +0100525[[category_forge_committer]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800526=== Forge Committer
Fredrik Luthander8f430f12011-12-27 13:40:43 +0100527
528Normally Gerrit requires the author and the committer identity
529lines in a Git commit object (or tagger line in an annotated tag) to
530match one of the registered email addresses of the uploading user.
531This permission allows users to bypass parts of that validation, which
532may be necessary when mirroring changes from an upstream project.
533
534Allows the use of an unverified committer line in commit objects, or an
535unverified tagger line in annotated tag objects. Typically this is only
536required when mirroring commits from an upstream project repository.
537
538
539[[category_forge_server]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800540=== Forge Server
Fredrik Luthander8f430f12011-12-27 13:40:43 +0100541
542Normally Gerrit requires the author and the committer identity
543lines in a Git commit object (or tagger line in an annotated tag) to
544match one of the registered email addresses of the uploading user.
545This permission allows users to bypass parts of that validation, which
546may be necessary when mirroring changes from an upstream project.
547
548Allows the use of the server's own name and email on the committer
549line of a new commit object. This should only be necessary when force
550pushing a commit history which has been rewritten by 'git filter-branch'
551and that contains merge commits previously created by this Gerrit Code
552Review server.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100553
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100554
555[[category_owner]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800556=== Owner
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100557
558The `Owner` category controls which groups can modify the project's
559configuration. Users who are members of an owner group can:
560
561* Change the project description
Fredrik Luthander9c949382014-03-22 09:19:45 -0700562* Create a branch via the ssh command link:cmd-create-branch.html['create-branch']
Mani Chandel7ec4ac72013-12-10 14:50:33 +0530563* Create/delete a branch through the web UI
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100564* Grant/revoke any access rights, including `Owner`
565
Mani Chandel7ec4ac72013-12-10 14:50:33 +0530566To get SSH branch access project owners must grant an access right to a group
567they are a member of, just like for any other user.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100568
569Ownership over a particular branch subspace may be delegated by
570entering a branch pattern. To delegate control over all branches
571that begin with `qa/` to the QA group, add `Owner` category
Jonathan Nieder5758f182015-03-30 11:28:55 -0700572for reference `+refs/heads/qa/*+`. Members of the QA group can
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100573further refine access, but only for references that begin with
Fredrik Luthander8fa3d262011-11-07 17:04:01 +0100574`refs/heads/qa/`. See <<project_owners,project owners>> to find
575out more about this role.
576
Edwin Kempin362fc852016-12-05 17:32:04 +0100577For the `All-Projects` root project any `Owner` access right on
578'refs/*' is ignored since this permission would allow users to edit the
579global capabilities, which is the same as being able to administrate
580the Gerrit server (e.g. the user could assign the `Administrate Server`
581capability to the own account).
582
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100583
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100584[[category_push]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800585=== Push
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100586
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100587This category controls how users are allowed to upload new commits
588to projects in Gerrit. It can either give permission to push
589directly into a branch, bypassing any code review process
590that would otherwise be used. Or it may give permission to upload
591new changes for code review, this depends on which namespace the
592permission is granted to.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100593
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100594[[category_push_direct]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800595==== Direct Push
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100596
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100597Any existing branch can be fast-forwarded to a new commit.
Robin Rosenberg524a3032012-10-14 14:24:36 +0200598Creation of new branches is controlled by the
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100599link:access-control.html#category_create['Create Reference']
600category. Deletion of existing branches is rejected. This is the
601safest mode as commits cannot be discarded.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100602
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100603* Force option
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100604+
Gert van Dijk8c5e33c2017-10-19 22:38:06 +0200605Implies <<category_delete,Delete Reference>>. Since a force push is
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100606effectively a delete immediately followed by a create, but performed
607atomically on the server and logged, this option also permits forced
608push updates to branches. Enabling this option allows existing commits
609to be discarded from a project history.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100610
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100611The push category is primarily useful for projects that only want to
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100612take advantage of Gerrit's access control features and do not need
613its code review functionality. Projects that need to require code
614reviews should not grant this category.
615
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100616
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100617[[category_push_review]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800618==== Upload To Code Review
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100619
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100620The `Push` access right granted on the namespace
621`refs/for/refs/heads/BRANCH` permits the user to upload a non-merge
622commit to the project's `refs/for/BRANCH` namespace, creating a new
623change for code review.
624
625A user must be able to clone or fetch the project in order to create
626a new commit on their local system, so in practice they must also
627have the `Read` access granted to upload a change.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100628
Edwin Kempind8b1b0f2016-09-30 14:13:20 +0200629For an open source, public Gerrit installation, it is common to grant
630`Push` for `+refs/for/refs/heads/*+` to `Registered Users` in the
631`All-Projects` ACL. For more private installations, its common to
632grant `Push` for `+refs/for/refs/heads/*+` to all users of a project.
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100633
634* Force option
635+
636The force option has no function when granted to a branch in the
Jonathan Nieder5758f182015-03-30 11:28:55 -0700637`+refs/for/refs/heads/*+` namespace.
Fredrik Luthanderea13ca52011-12-29 11:36:48 +0100638
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100639
David Pursehouse596f3642016-08-31 10:25:19 +0900640[[category_add_patch_set]]
641=== Add Patch Set
642
643This category controls which users are allowed to upload new patch sets to
644existing changes. Irrespective of this permission, change owners are always
645allowed to upload new patch sets for their changes. This permission needs to be
646set on `refs/for/*`.
647
Aaron Gablebf7f41a2016-09-20 15:25:00 -0700648By default, this permission is granted to `Registered Users` on `refs/for/*`,
649allowing all registered users to upload a new patch set to any change. Revoking
650this permission (by granting it to no groups and setting the "Exclusive" flag)
651will prevent users from uploading a patch set to a change they do not own.
David Pursehouse596f3642016-08-31 10:25:19 +0900652
653
Fredrik Luthanderbf568572012-01-18 11:17:00 +0100654[[category_push_merge]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800655=== Push Merge Commits
Fredrik Luthanderbf568572012-01-18 11:17:00 +0100656
Magnus Bäck282c1022012-04-18 15:39:17 -0400657The `Push Merge Commit` access right permits the user to upload merge
Gustaf Lundha28a1d22013-05-08 15:05:12 +0100658commits. It's an add-on to the <<category_push,Push>> access right, and
Magnus Bäck282c1022012-04-18 15:39:17 -0400659so it won't be sufficient with only `Push Merge Commit` granted for a
660push to happen. Some projects wish to restrict merges to being created
661by Gerrit. By granting `Push` without `Push Merge Commit`, the only
Edwin Kempinaef5d6e2012-01-24 09:04:54 +0100662merges that enter the system will be those created by Gerrit.
Fredrik Luthanderbf568572012-01-18 11:17:00 +0100663
Jonathan Niederdaf8bd42013-10-01 15:06:14 -0700664The reference name connected to a `Push Merge Commit` entry must always
665be prefixed with `refs/for/`, for example `refs/for/refs/heads/BRANCH`.
666This applies even for an entry that complements a `Push` entry for
667`refs/heads/BRANCH` that allows direct pushes of non-merge commits, and
668the intention of the `Push Merge Commit` entry is to allow direct pushes
669of merge commits.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100670
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200671
Fredrik Luthanderd7749862012-01-20 07:29:43 +0100672[[category_push_annotated]]
Edwin Kempin62c15682016-09-05 14:32:38 +0200673[[category_create_annotated]]
674=== Create Annotated Tag
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100675
David Pursehouse690cebe2012-12-12 19:22:45 +0900676This category permits users to push an annotated tag object into the
677project's repository. Typically this would be done with a command line
678such as:
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100679
Michael Ochmannb99feab2016-07-06 14:10:22 +0200680----
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100681 git push ssh://USER@HOST:PORT/PROJECT tag v1.0
Michael Ochmannb99feab2016-07-06 14:10:22 +0200682----
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100683
David Pursehouse690cebe2012-12-12 19:22:45 +0900684Or:
685
Michael Ochmannb99feab2016-07-06 14:10:22 +0200686----
David Pursehouse690cebe2012-12-12 19:22:45 +0900687 git push https://HOST/PROJECT tag v1.0
Michael Ochmannb99feab2016-07-06 14:10:22 +0200688----
David Pursehouse690cebe2012-12-12 19:22:45 +0900689
David Pursehouseb429ce12012-12-12 11:04:40 +0900690Tags must be annotated (created with `git tag -a`), should exist in
691the `refs/tags/` namespace, and should be new.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100692
693This category is intended to be used to publish tags when a project
694reaches a stable release point worth remembering in history.
695
Fredrik Luthanderd7749862012-01-20 07:29:43 +0100696It allows for a new annotated (unsigned) tag to be created. The
697tagger email address must be verified for the current user.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100698
699To push tags created by users other than the current user (such
Fredrik Luthanderd7749862012-01-20 07:29:43 +0100700as tags mirrored from an upstream project), `Forge Committer Identity`
Edwin Kempin62c15682016-09-05 14:32:38 +0200701must be also granted in addition to `Create Annotated Tag`.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100702
Fredrik Luthanderd7749862012-01-20 07:29:43 +0100703To push lightweight (non annotated) tags, grant
704<<category_create,`Create Reference`>> for reference name
Jonathan Nieder5758f182015-03-30 11:28:55 -0700705`+refs/tags/*+`, as lightweight tags are implemented just like
Fredrik Luthanderd7749862012-01-20 07:29:43 +0100706branches in Git.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100707
Fredrik Luthanderd7749862012-01-20 07:29:43 +0100708To delete or overwrite an existing tag, grant `Push` with the force
Jonathan Nieder5758f182015-03-30 11:28:55 -0700709option enabled for reference name `+refs/tags/*+`, as deleting a tag
Fredrik Luthanderd7749862012-01-20 07:29:43 +0100710requires the same permission as deleting a branch.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100711
Edwin Kempin94db6b62016-09-02 14:37:17 +0200712To push an annotated tag on a new commit (commit not reachable from any
713branch/tag) grant `Push` permission on `+refs/tags/*+` too.
Edwin Kempin439dd1f2016-09-05 16:25:12 +0200714The `Push` permission on `+refs/tags/*+` does *not* allow updating of annotated
Edwin Kempin0a41b9c2016-09-05 16:38:51 +0200715tags, not even fast-forwarding of annotated tags. Update of annotated tags
716is only allowed by granting `Push` with `force` option on `+refs/tags/*+`.
Edwin Kempin94db6b62016-09-02 14:37:17 +0200717
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100718
David Pursehouseb429ce12012-12-12 11:04:40 +0900719[[category_push_signed]]
Edwin Kempin62c15682016-09-05 14:32:38 +0200720[[category_create_signed]]
721=== Create Signed Tag
David Pursehouseb429ce12012-12-12 11:04:40 +0900722
David Pursehouse690cebe2012-12-12 19:22:45 +0900723This category permits users to push a PGP signed tag object into the
724project's repository. Typically this would be done with a command
725line such as:
David Pursehouseb429ce12012-12-12 11:04:40 +0900726
Michael Ochmannb99feab2016-07-06 14:10:22 +0200727----
David Pursehouseb429ce12012-12-12 11:04:40 +0900728 git push ssh://USER@HOST:PORT/PROJECT tag v1.0
Michael Ochmannb99feab2016-07-06 14:10:22 +0200729----
David Pursehouseb429ce12012-12-12 11:04:40 +0900730
David Pursehouse690cebe2012-12-12 19:22:45 +0900731Or:
732
Michael Ochmannb99feab2016-07-06 14:10:22 +0200733----
David Pursehouse690cebe2012-12-12 19:22:45 +0900734 git push https://HOST/PROJECT tag v1.0
Michael Ochmannb99feab2016-07-06 14:10:22 +0200735----
David Pursehouse690cebe2012-12-12 19:22:45 +0900736
David Pursehouseb429ce12012-12-12 11:04:40 +0900737Tags must be signed (created with `git tag -s`), should exist in the
738`refs/tags/` namespace, and should be new.
739
740
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100741[[category_read]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800742=== Read
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100743
744The `Read` category controls visibility to the project's
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100745changes, comments, code diffs, and Git access over SSH or HTTP.
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100746A user must have this access granted in order to see a project, its
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100747changes, or any of its data.
748
749This category has a special behavior, where the per-project ACL is
750evaluated before the global all projects ACL. If the per-project
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100751ACL has granted `Read` with 'DENY', and does not otherwise grant
752`Read` with 'ALLOW', then a `Read` in the all projects ACL
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100753is ignored. This behavior is useful to hide a handful of projects
754on an otherwise public server.
755
756For an open source, public Gerrit installation it is common to grant
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100757`Read` to `Anonymous Users` in the `All-Projects` ACL, enabling
758casual browsing of any project's changes, as well as fetching any
759project's repository over SSH or HTTP. New projects can be
760temporarily hidden from public view by granting `Read` with 'DENY'
761to `Anonymous Users` and granting `Read` to the project owner's
762group within the per-project ACL.
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100763
764For a private Gerrit installation using a trusted HTTP authentication
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100765source, granting `Read` to `Registered Users` may be more
Fredrik Luthanderdb7679a2011-11-03 08:52:56 +0100766typical, enabling read access only to those users who have been
767able to authenticate through the HTTP access controls. This may
768be suitable in a corporate deployment if the HTTP access control
769is already restricted to the correct set of users.
770
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100771
Edwin Kempinfd330fc2012-05-09 21:09:55 +0200772[[category_rebase]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800773=== Rebase
Edwin Kempinfd330fc2012-05-09 21:09:55 +0200774
775This category permits users to rebase changes via the web UI by pushing
776the `Rebase Change` button.
777
778The change owner and submitters can always rebase changes in the web UI
779(even without having the `Rebase` access right assigned).
780
781Users without this access right who are able to upload new patch sets
782can still do the rebase locally and upload the rebased commit as a new
783patch set.
784
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200785
Chad Horohoec626f3c2012-09-13 11:04:20 -0700786[[category_remove_reviewer]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800787=== Remove Reviewer
Chad Horohoec626f3c2012-09-13 11:04:20 -0700788
789This category permits users to remove other users from the list of
790reviewers on a change.
791
David Pursehouseb3d13832014-12-04 14:50:37 +0900792Change owners can always remove reviewers who have given a zero or positive
793score (even without having the `Remove Reviewer` access right assigned).
794
795Project owners and site administrators can always remove any reviewer (even
796without having the `Remove Reviewer` access right assigned).
Chad Horohoec626f3c2012-09-13 11:04:20 -0700797
798Users without this access right can only remove themselves from the
799reviewer list on a change.
800
Edwin Kempinfd330fc2012-05-09 21:09:55 +0200801
Fredrik Luthander5ccf2e42013-05-08 01:06:25 +0200802[[category_review_labels]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800803=== Review Labels
Fredrik Luthander5ccf2e42013-05-08 01:06:25 +0200804
805For every configured label `My-Name` in the project, there is a
806corresponding permission `label-My-Name` with a range corresponding to
Shawn Pearce9d783122013-06-11 18:18:03 -0700807the defined values. There is also a corresponding `labelAs-My-Name`
808permission that enables editing another user's label.
Fredrik Luthander5ccf2e42013-05-08 01:06:25 +0200809
810Gerrit comes pre-configured with a default 'Code-Review' label that can
811be granted to groups within projects, enabling functionality for that
812group's members. link:config-labels.html[Custom labels] may also be
813defined globally or on a per-project basis.
814
815
Fredrik Luthander5e1b51b2012-01-20 13:06:06 +0100816[[category_submit]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800817=== Submit
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800818
David Pursehouse6bf46ed2015-02-04 20:31:23 +0900819This category permits users to submit changes.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800820
821Submitting a change causes it to be merged into the destination
822branch as soon as possible, making it a permanent part of the
David Pursehouse22bd6f92014-02-20 21:11:01 +0900823project's history.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800824
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800825In order to submit, all labels (such as `Verified` and `Code-Review`,
826above) must enable submit, and also must not block it. See above for
827details on each label.
Shawn O. Pearce4b122b82009-02-18 18:22:14 -0800828
Edwin Kempinbfa06212013-04-04 16:06:39 +0200829To link:user-upload.html#auto_merge[immediately submit a change on push]
830the caller needs to have the Submit permission on `refs/for/<ref>`
831(e.g. on `refs/for/refs/heads/master`).
832
Edwin Kempin1493bd62016-12-02 10:12:17 +0100833Submitting to the `refs/meta/config` branch is only allowed to project
834owners. Any explicit submit permissions for non-project-owners on this
835branch are ignored. By submitting to the `refs/meta/config` branch the
836configuration of the project is changed, which can include changes to
837the access rights of the project. Allowing this to be done by a
838non-project-owner would open a security hole enabling editing of access
839rights, and thus granting of powers beyond submitting to the
840configuration.
841
David Pursehouse22bd6f92014-02-20 21:11:01 +0900842[[category_submit_on_behalf_of]]
843=== Submit (On Behalf Of)
844
845This category permits users who have also been granted the `Submit`
Dave Borowitzc6d143d2016-02-24 12:32:23 -0500846permission to submit changes on behalf of another user, by using the
847`on_behalf_of` field in link:rest-api-changes.html#submit-input[SubmitInput]
848when link:rest-api-changes.html#submit-change[submitting using the REST API].
David Pursehouse22bd6f92014-02-20 21:11:01 +0900849
850Note that this permission is named `submitAs` in the `project.config`
851file.
Fredrik Luthanderbc75ef72012-01-26 15:57:08 +0100852
David Pursehouse5ae73002012-11-01 15:22:26 +0900853[[category_view_drafts]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800854=== View Drafts
David Pursehouse5ae73002012-11-01 15:22:26 +0900855
856This category permits users to view draft changes uploaded by other
857users.
858
859The change owner and any explicitly added reviewers can always see
860draft changes (even without having the `View Drafts` access right
861assigned).
862
863
David Pursehousebe7f4582012-12-12 11:21:29 +0900864[[category_publish_drafts]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800865=== Publish Drafts
David Pursehousebe7f4582012-12-12 11:21:29 +0900866
867This category permits users to publish draft changes uploaded by other
868users.
869
870The change owner can always publish draft changes (even without having
871the `Publish Drafts` access right assigned).
872
873
874[[category_delete_drafts]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800875=== Delete Drafts
David Pursehousebe7f4582012-12-12 11:21:29 +0900876
877This category permits users to delete draft changes uploaded by other
878users.
879
880The change owner can always delete draft changes (even without having
881the `Delete Drafts` access right assigned).
882
883
Paladox none580ae0e2017-02-12 18:15:48 +0000884[[category_delete_own_changes]]
885=== Delete Own Changes
886
887This category permits users to delete their own changes if they are not merged
888yet. This means only own changes that are open or abandoned can be deleted.
889
David Pursehouse59aee362012-11-15 17:25:17 +0900890[[category_edit_topic_name]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800891=== Edit Topic Name
David Pursehouse59aee362012-11-15 17:25:17 +0900892
893This category permits users to edit the topic name of a change that
894is uploaded for review.
895
896The change owner, branch owners, project owners, and site administrators
897can always edit the topic name (even without having the `Edit Topic Name`
898access right assigned).
899
Edwin Kempin1f77b532013-11-08 07:16:31 +0100900Whether the topic can be edited on closed changes can be controlled
901by the 'Force Edit' flag. If this flag is not set the topic can only be
902edited on open changes.
903
David Pursehouse59aee362012-11-15 17:25:17 +0900904
David Pursehousede711702014-09-10 16:23:34 +0200905[[category_edit_hashtags]]
906=== Edit Hashtags
907
908This category permits users to add or remove hashtags on a change that
909is uploaded for review.
910
911The change owner, branch owners, project owners, and site administrators
912can always edit or remove hashtags (even without having the `Edit Hashtags`
913access right assigned).
914
Sven Selberga3ca6042016-09-13 16:16:54 +0200915[[category_edit_assigned_to]]
916=== Edit Assignee
917
918This category permits users to set who is assigned to a change that is
919uploaded for review.
920
921The change owner, ref owners, and the user currently assigned to a change
922can always change the assignee.
David Pursehousede711702014-09-10 16:23:34 +0200923
Edwin Kempin4bf01962014-04-16 16:47:10 +0200924[[example_roles]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800925== Examples of typical roles in a project
Fredrik Luthanderbc75ef72012-01-26 15:57:08 +0100926
927Below follows a set of typical roles on a server and which access
928rights these roles typically should be granted. You may see them as
David Pursehouse221d4f62012-06-08 17:38:08 +0900929general guidelines for a typical way to set up your project on a
Fredrik Luthanderbc75ef72012-01-26 15:57:08 +0100930brand new Gerrit instance.
931
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +0200932
Fredrik Luthanderbc75ef72012-01-26 15:57:08 +0100933[[examples_contributor]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800934=== Contributor
Fredrik Luthanderbc75ef72012-01-26 15:57:08 +0100935
936This is the typical user on a public server. They are able to read
937your project and upload new changes to it. They are able to give
938feedback on other changes as well, but are unable to block or approve
939any changes.
940
941Suggested access rights to grant:
942
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800943* xref:category_read[`Read`] on 'refs/heads/\*' and 'refs/tags/*'
944* xref:category_push[`Push`] to 'refs/for/refs/heads/*'
945* link:config-labels.html#label_Code-Review[`Code-Review`] with range '-1' to '+1' for 'refs/heads/*'
Fredrik Luthanderbc75ef72012-01-26 15:57:08 +0100946
Fredrik Luthanderd6c59252014-03-17 00:56:04 +0100947If it's desired to have the possibility to upload temporarily hidden
948changes there's a specific permission for that. This enables someone
949to add specific reviewers for early feedback before making the change
David Pursehouse1ff91c02015-05-19 15:05:26 +0900950publicly visible. If you want to allow others than the owners to
Fredrik Luthanderd6c59252014-03-17 00:56:04 +0100951publish a draft you also need to grant them `Publish Drafts`.
952
953Optional access rights to grant:
954
955* xref:category_push[`Push`] to 'refs/drafts/*'
956* xref:category_publish_drafts[`Publish Drafts`] to 'refs/heads/*'
957
Fredrik Luthanderbc75ef72012-01-26 15:57:08 +0100958
Fredrik Luthander654161c2012-01-31 14:42:36 +0100959[[examples_developer]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800960=== Developer
Fredrik Luthander654161c2012-01-31 14:42:36 +0100961
962This is the typical core developer on a public server. They are able
963to read the project, upload changes to a branch. They are allowed to
964push merge commits to merge branches together. Also, they are allowed
965to forge author identity, thus handling commits belonging to others
966than themselves, effectively allowing them to transfer commits
967between different branches.
968
969They are furthermore able to code review and verify commits, and
970eventually submit them. If you have an automated CI system that
971builds all uploaded patch sets you might want to skip the
972verification rights for the developer and let the CI system do that
973exclusively.
974
975Suggested access rights to grant:
976
Dave Borowitz01c1b1f2013-02-27 13:49:04 -0800977* xref:category_read[`Read`] on 'refs/heads/\*' and 'refs/tags/*'
978* xref:category_push[`Push`] to 'refs/for/refs/heads/*'
979* xref:category_push_merge[`Push merge commit`] to 'refs/for/refs/heads/*'
980* xref:category_forge_author[`Forge Author Identity`] to 'refs/heads/*'
981* link:config-labels.html#label_Code-Review[`Label: Code-Review`] with range '-2' to '+2' for 'refs/heads/*'
Peter Jönsson3bfcae72013-07-17 22:06:32 +0200982* link:config-labels.html#label_Verified[`Label: Verified`] with range '-1' to '+1' for 'refs/heads/*'
Edwin Kempin7b1897c2015-04-16 15:13:44 +0200983* xref:category_submit[`Submit`] on 'refs/heads/*'
Fredrik Luthander654161c2012-01-31 14:42:36 +0100984
985If the project is small or the developers are seasoned it might make
986sense to give them the freedom to push commits directly to a branch.
987
988Optional access rights to grant:
989
990* <<category_push,`Push`>> to 'refs/heads/*'
991* <<category_push_merge,`Push merge commit`>> to 'refs/heads/*'
992
993
Fredrik Luthanderf2105be2012-01-27 12:44:05 +0100994[[examples_cisystem]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -0800995=== CI system
Fredrik Luthanderf2105be2012-01-27 12:44:05 +0100996
Gustaf Lundha28a1d22013-05-08 15:05:12 +0100997A typical Continuous Integration system should be able to download new changes
Fredrik Luthanderf2105be2012-01-27 12:44:05 +0100998to build and then leave a verdict somehow.
999
1000As an example, the popular
1001link:https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger[gerrit-trigger plugin]
1002for Jenkins/Hudson can set labels at:
1003
1004* The start of a build
1005* A successful build
1006* An unstable build (tests fails)
1007* A failed build
1008
Peter Jönsson3bfcae72013-07-17 22:06:32 +02001009Usually the range chosen for this verdict is the `Verified` label. Depending on
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001010the size of your project and discipline of involved developers you might want
Peter Jönsson3bfcae72013-07-17 22:06:32 +02001011to limit access right to the +1 `Verified` label to the CI system only. That
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001012way it's guaranteed that submitted commits always get built and pass tests
1013successfully.
1014
1015If the build doesn't complete successfully the CI system can set the
Peter Jönsson3bfcae72013-07-17 22:06:32 +02001016`Verified` label to -1. However that means that a failed build will block
1017submit of the change even if someone else sets `Verified` +1. Depending on the
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001018project and how much the CI system can be trusted for accurate results, a
1019blocking label might not be feasible. A recommended alternative is to set the
1020label `Code-review` to -1 instead, as it isn't a blocking label but still
David Pursehouse221d4f62012-06-08 17:38:08 +09001021shows a red label in the Gerrit UI. Optionally, to enable the possibility to
1022deliver different results (build error vs unstable for instance), it's also
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001023possible to set `Code-review` +1 as well.
1024
Edwin Kempina2e13cf2012-03-30 09:02:36 +02001025If pushing new changes is granted, it's possible to automate cherry-pick of
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001026submitted changes for upload to other branches under certain conditions. This
1027is probably not the first step of what a project wants to automate however,
1028and so the push right can be found under the optional section.
1029
1030Suggested access rights to grant, that won't block changes:
1031
Dave Borowitz01c1b1f2013-02-27 13:49:04 -08001032* xref:category_read[`Read`] on 'refs/heads/\*' and 'refs/tags/*'
1033* link:config-labels.html#label_Code-Review[`Label: Code-Review`] with range '-1' to '0' for 'refs/heads/*'
Peter Jönsson3bfcae72013-07-17 22:06:32 +02001034* link:config-labels.html#label_Verified[`Label: Verified`] with range '0' to '+1' for 'refs/heads/*'
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001035
1036Optional access rights to grant:
1037
Dave Borowitz01c1b1f2013-02-27 13:49:04 -08001038* link:config-labels.html#label_Code-Review[`Label: Code-Review`] with range '-1' to '+1' for 'refs/heads/*'
1039* xref:category_push[`Push`] to 'refs/for/refs/heads/*'
Fredrik Luthanderf2105be2012-01-27 12:44:05 +01001040
1041
Fredrik Luthanderfe720022012-03-22 17:29:39 +01001042[[examples_integrator]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001043=== Integrator
Fredrik Luthanderfe720022012-03-22 17:29:39 +01001044
1045Integrators are like developers but with some additional rights granted due
1046to their administrative role in a project. They can upload or push any commit
1047with any committer email (not just their own) and they can also create new
1048tags and branches.
1049
1050Suggested access rights to grant:
1051
1052* <<examples_developer,Developer rights>>
1053* <<category_push,`Push`>> to 'refs/heads/*'
1054* <<category_push_merge,`Push merge commit`>> to 'refs/heads/*'
Fredrik Luthander404a2852012-10-10 08:51:22 +02001055* <<category_forge_committer,`Forge Committer Identity`>> to 'refs/for/refs/heads/*'
Fredrik Luthanderfe720022012-03-22 17:29:39 +01001056* <<category_create,`Create Reference`>> to 'refs/heads/*'
Edwin Kempin62c15682016-09-05 14:32:38 +02001057* <<category_create_annotated,`Create Annotated Tag`>> to 'refs/tags/*'
Fredrik Luthanderfe720022012-03-22 17:29:39 +01001058
1059
Fredrik Luthander9c645362012-03-22 18:10:42 +01001060[[examples_project-owner]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001061=== Project owner
Fredrik Luthander9c645362012-03-22 18:10:42 +01001062
1063The project owner is almost like an integrator but with additional destructive
1064power in the form of being able to delete branches. Optionally these users
1065also have the power to configure access rights in gits assigned to them.
1066
1067[WARNING]
Gustaf Lundha28a1d22013-05-08 15:05:12 +01001068These users should be really knowledgeable about git, for instance knowing why
Fredrik Luthander9c645362012-03-22 18:10:42 +01001069tags never should be removed from a server. This role is granted potentially
1070destructive access rights and cleaning up after such a mishap could be time
1071consuming!
1072
1073Suggested access rights to grant:
1074
1075* <<examples_integrator,Integrator rights>>
1076* <<category_push,`Push`>> with the force option to 'refs/heads/\*' and 'refs/tags/*'
1077
1078Optional access right to grant:
1079
1080* <<category_owner,`Owner`>> in the gits they mostly work with.
1081
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +02001082
Fredrik Luthander5a8e7d82012-03-22 17:29:39 +01001083[[examples_administrator]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001084=== Administrator
Fredrik Luthander5a8e7d82012-03-22 17:29:39 +01001085
1086The administrator role is the most powerful role known in the Gerrit universe.
Fredrik Luthanderb8eaa082014-03-17 01:02:22 +01001087This role may grant itself (or others) any access right. By default the
Fredrik Luthander5a8e7d82012-03-22 17:29:39 +01001088<<administrators,`Administrators` group>> is the group that has this role.
1089
1090Mandatory access rights:
1091
1092* <<capability_administrateServer,The `Administrate Server` capability>>
1093
1094Suggested access rights to grant:
1095
Fredrik Luthanderb8eaa082014-03-17 01:02:22 +01001096* <<examples_project-owner,`Project owner rights`>>
1097* Any <<global_capabilities,`capabilities`>> needed by the administrator
Fredrik Luthander5a8e7d82012-03-22 17:29:39 +01001098
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +02001099
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001100== Enforcing site wide access policies
Sasa Zivkovd589f462013-02-12 14:27:09 +01001101
Jonathan Nieder5758f182015-03-30 11:28:55 -07001102By granting the <<category_owner,`Owner`>> access right on the `+refs/*+` to a
Sasa Zivkovd589f462013-02-12 14:27:09 +01001103group, Gerrit administrators can delegate the responsibility of maintaining
1104access rights for that project to that group.
1105
1106In a corporate deployment it is often necessary to enforce some access
1107policies. An example could be that no-one can update or delete a tag, not even
1108the project owners. The 'ALLOW' and 'DENY' rules are not enough for this
1109purpose as project owners can grant themselves any access right they wish and,
1110thus, effectively override any inherited access rights from the
1111"`All-Projects`" or some other common parent project.
1112
1113What is needed is a mechanism to block a permission in a parent project so
1114that even project owners cannot allow a blocked permission in their child
1115project. Still, project owners should retain the possibility to manage all
1116non-blocked rules as they wish. This gives best of both worlds:
1117
1118* Gerrit administrators can concentrate on enforcing site wide policies
1119 and providing a meaningful set of default access permissions
1120* Project owners can manage access rights of their projects without a danger
1121 of violating a site wide policy
1122
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +02001123
Edwin Kempin60ab8532013-03-27 14:33:46 +01001124[[block]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001125=== 'BLOCK' access rule
Sasa Zivkovd589f462013-02-12 14:27:09 +01001126
Edwin Kempin2ff687b2016-09-01 11:07:05 +02001127The 'BLOCK' rule blocks a permission globally. An inherited 'BLOCK'
1128rule cannot be overridden in the inheriting project. Any 'ALLOW' rule
1129from an inheriting project, which conflicts with an inherited 'BLOCK'
1130rule will not be honored. Searching for 'BLOCK' rules, in the chain
1131of parent projects, ignores the Exclusive flag, unless the rule with
1132the Exclusive flag is defined on the same project as the 'BLOCK'
1133rule. This means within the same project a 'BLOCK' rule can be
1134overruled by 'ALLOW' rules on the same access section and 'ALLOW'
1135rules with Exclusive flag on access section for more specific refs.
Sasa Zivkovd589f462013-02-12 14:27:09 +01001136
1137A 'BLOCK' rule that blocks the 'push' permission blocks any type of push,
1138force or not. A blocking force push rule blocks only force pushes, but
1139allows non-forced pushes if an 'ALLOW' rule would have permitted it.
1140
1141It is also possible to block label ranges. To block a group 'X' from voting
1142'-2' and '+2', but keep their existing voting permissions for the '-1..+1'
1143range intact we would define:
1144
Michael Ochmannb99feab2016-07-06 14:10:22 +02001145----
Sasa Zivkovd589f462013-02-12 14:27:09 +01001146 [access "refs/heads/*"]
1147 label-Code-Review = block -2..+2 group X
Michael Ochmannb99feab2016-07-06 14:10:22 +02001148----
Sasa Zivkovd589f462013-02-12 14:27:09 +01001149
1150The interpretation of the 'min..max' range in case of a blocking rule is: block
1151every vote from '-INFINITE..min' and 'max..INFINITE'. For the example above it
1152means that the range '-1..+1' is not affected by this block.
1153
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001154=== 'BLOCK' and 'ALLOW' rules in the same access section
Sasa Zivkovcff084b2013-01-15 18:52:32 +01001155
1156When an access section of a project contains a 'BLOCK' and an 'ALLOW' rule for
1157the same permission then this 'ALLOW' rule overrides the 'BLOCK' rule:
1158
Michael Ochmannb99feab2016-07-06 14:10:22 +02001159----
Sasa Zivkovcff084b2013-01-15 18:52:32 +01001160 [access "refs/heads/*"]
1161 push = block group X
1162 push = group Y
Michael Ochmannb99feab2016-07-06 14:10:22 +02001163----
Sasa Zivkovcff084b2013-01-15 18:52:32 +01001164
1165In this case a user which is a member of the group 'Y' will still be allowed to
1166push to 'refs/heads/*' even if it is a member of the group 'X'.
1167
Michael Ochmann8129ece2016-07-08 11:25:25 +02001168[NOTE]
1169An 'ALLOW' rule overrides a 'BLOCK' rule only when both of them are
Sasa Zivkovcff084b2013-01-15 18:52:32 +01001170inside the same access section of the same project. An 'ALLOW' rule in a
1171different access section of the same project or in any access section in an
1172inheriting project cannot override a 'BLOCK' rule.
1173
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +02001174
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001175=== Examples
Sasa Zivkovd589f462013-02-12 14:27:09 +01001176
1177The following examples show some possible use cases for the 'BLOCK' rules.
1178
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001179==== Make sure no one can update or delete a tag
Sasa Zivkovd589f462013-02-12 14:27:09 +01001180
1181This requirement is quite common in a corporate deployment where
1182reproducibility of a build must be guaranteed. To achieve that we block 'push'
1183permission for the <<anonymous_users,'Anonymous Users'>> in "`All-Projects`":
1184
Michael Ochmannb99feab2016-07-06 14:10:22 +02001185----
Sasa Zivkovd589f462013-02-12 14:27:09 +01001186 [access "refs/tags/*"]
1187 push = block group Anonymous Users
Michael Ochmannb99feab2016-07-06 14:10:22 +02001188----
Sasa Zivkovd589f462013-02-12 14:27:09 +01001189
1190By blocking the <<anonymous_users,'Anonymous Users'>> we effectively block
1191everyone as everyone is a member of that group. Note that the permission to
1192create a tag is still necessary. Assuming that only <<category_owner,project
1193owners>> are allowed to create tags, we would extend the example above:
1194
Michael Ochmannb99feab2016-07-06 14:10:22 +02001195----
Sasa Zivkovd589f462013-02-12 14:27:09 +01001196 [access "refs/tags/*"]
1197 push = block group Anonymous Users
1198 create = group Project Owners
1199 pushTag = group Project Owners
Michael Ochmannb99feab2016-07-06 14:10:22 +02001200----
Fredrik Luthander9c645362012-03-22 18:10:42 +01001201
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +02001202
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001203==== Let only a dedicated group vote in a special category
Sasa Zivkovcff084b2013-01-15 18:52:32 +01001204
1205Assume there is a more restrictive process for submitting changes in stable
1206release branches which is manifested as a new voting category
1207'Release-Process'. Assume we want to make sure that only a 'Release Engineers'
1208group can vote in this category and that even project owners cannot approve
1209this category. We have to block everyone except the 'Release Engineers' to vote
1210in this category and, of course, allow 'Release Engineers' to vote in that
1211category. In the "`All-Projects`" we define the following rules:
1212
Michael Ochmannb99feab2016-07-06 14:10:22 +02001213----
Sasa Zivkovcff084b2013-01-15 18:52:32 +01001214 [access "refs/heads/stable*"]
Gustaf Lundha28a1d22013-05-08 15:05:12 +01001215 label-Release-Process = block -1..+1 group Anonymous Users
1216 label-Release-Process = -1..+1 group Release Engineers
Michael Ochmannb99feab2016-07-06 14:10:22 +02001217----
Sasa Zivkovcff084b2013-01-15 18:52:32 +01001218
David Pursehouse8becc2a2013-04-23 18:51:04 +09001219[[global_capabilities]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001220== Global Capabilities
Fredrik Luthander80ebf9d2012-02-13 09:32:43 +01001221
David Pursehouse8becc2a2013-04-23 18:51:04 +09001222The global capabilities control actions that the administrators of
Fredrik Luthander80ebf9d2012-02-13 09:32:43 +01001223the server can perform which usually affect the entire
1224server in some way. The administrators may delegate these
1225capabilities to trusted groups of users.
1226
1227Delegation of capabilities allows groups to be granted a subset of
1228administrative capabilities without being given complete
1229administrative control of the server. This makes it possible to
1230keep fewer users in the administrators group, even while spreading
1231much of the server administration burden out to more users.
1232
David Pursehouse8becc2a2013-04-23 18:51:04 +09001233Global capabilities are assigned to groups in the access rights settings
1234of the root project ("`All-Projects`").
1235
Fredrik Luthander80ebf9d2012-02-13 09:32:43 +01001236Below you find a list of capabilities available:
1237
1238
David Pursehouse11c4c5f2013-06-09 08:07:23 +09001239[[capability_accessDatabase]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001240=== Access Database
David Pursehouse11c4c5f2013-06-09 08:07:23 +09001241
Dave Borowitzd9b8b392014-09-11 13:49:54 +02001242Allow users to access the database using the `gsql` command, and view code
1243review metadata refs in repositories.
David Pursehouse11c4c5f2013-06-09 08:07:23 +09001244
1245
Fredrik Luthander426885f2012-02-13 09:56:57 +01001246[[capability_administrateServer]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001247=== Administrate Server
Fredrik Luthander426885f2012-02-13 09:56:57 +01001248
1249This is in effect the owner and administrator role of the Gerrit
Edwin Kempin17287422016-04-07 08:44:39 +02001250instance. Any members of a group granted this capability will be
Fredrik Luthander426885f2012-02-13 09:56:57 +01001251able to grant any access right to any group. They will also have all
1252capabilities granted to them automatically.
1253
Edwin Kempin17287422016-04-07 08:44:39 +02001254In most installations only those users who have direct filesystem and
1255database access should be granted this capability.
1256
1257This capability does not imply any other access rights. Users that have
1258this capability do not automatically get code review approval or submit
1259rights in projects. This is a feature designed to permit administrative
1260users to otherwise access Gerrit as any other normal user would,
1261without needing two different accounts.
1262
Fredrik Luthander426885f2012-02-13 09:56:57 +01001263
Bruce Zu4512fe62014-11-18 17:39:41 +08001264[[capability_batchChangesLimit]]
1265=== Batch Changes Limit
1266
1267Allow site administrators to configure the batch changes limit for
1268users to override the system config
1269link:config-gerrit.html#receive.maxBatchChanges['receive.maxBatchChanges'].
1270
1271Administrators can add a global block to `All-Projects` with group(s)
1272that should have different limits.
1273
1274When applying a batch changes limit to a user the largest value
1275granted by any of their groups is used. 0 means no limit.
1276
1277
Fredrik Luthanderb02afca2012-02-13 09:59:48 +01001278[[capability_createAccount]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001279=== Create Account
Fredrik Luthanderb02afca2012-02-13 09:59:48 +01001280
Fredrik Luthander79d38152012-03-13 09:52:22 +01001281Allow link:cmd-create-account.html[account creation over the ssh prompt].
Fredrik Luthanderb02afca2012-02-13 09:59:48 +01001282This capability allows the granted group members to create non-interactive
1283service accounts. These service accounts are generally used for automation
1284and made to be members of the
1285link:access-control.html#non-interactive_users['Non-Interactive users'] group.
1286
1287
Fredrik Luthander79d38152012-03-13 09:52:22 +01001288[[capability_createGroup]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001289=== Create Group
Fredrik Luthander79d38152012-03-13 09:52:22 +01001290
1291Allow group creation. Groups are used to grant users access to different
1292actions in projects. This capability allows the granted group members to
1293either link:cmd-create-group.html[create new groups via ssh] or via the web UI.
1294
1295
1296[[capability_createProject]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001297=== Create Project
Fredrik Luthander79d38152012-03-13 09:52:22 +01001298
1299Allow project creation. This capability allows the granted group to
1300either link:cmd-create-project.html[create new git projects via ssh]
1301or via the web UI.
1302
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +02001303
Sasa Zivkov812f4892012-06-21 16:25:21 +02001304[[capability_emailReviewers]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001305=== Email Reviewers
Sasa Zivkov812f4892012-06-21 16:25:21 +02001306
1307Allow or deny sending email to change reviewers and watchers. This can be used
1308to deny build bots from emailing reviewers and people who watch the change.
1309Instead, only the authors of the change and those who starred it will be
1310emailed. The allow rules are evaluated before deny rules, however the default
1311is to allow emailing, if no explicit rule is matched.
Fredrik Luthander79d38152012-03-13 09:52:22 +01001312
Fredrik Luthandera8aa9c52013-05-09 14:50:39 +02001313
Fredrik Luthander74ad0d02012-03-13 13:06:30 +01001314[[capability_flushCaches]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001315=== Flush Caches
Fredrik Luthander74ad0d02012-03-13 13:06:30 +01001316
Fredrik Luthander48603002012-03-21 18:17:17 +01001317Allow the flushing of Gerrit's caches. This capability allows the granted
Fredrik Luthander74ad0d02012-03-13 13:06:30 +01001318group to link:cmd-flush-caches.html[flush some or all Gerrit caches via ssh].
1319
1320[NOTE]
1321This capability doesn't imply permissions to the show-caches command. For that
1322you need the <<capability_viewCaches,view caches capability>>.
1323
1324
Fredrik Luthander46843022012-03-13 16:11:02 +01001325[[capability_kill]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001326=== Kill Task
Fredrik Luthander46843022012-03-13 16:11:02 +01001327
1328Allow the operation of the link:cmd-kill.html[kill command over ssh]. The
1329kill command ends tasks that currently occupy the Gerrit server, usually
1330a replication task or a user initiated task such as an upload-pack or
Gustaf Lundha28a1d22013-05-08 15:05:12 +01001331receive-pack.
Fredrik Luthander46843022012-03-13 16:11:02 +01001332
Dave Borowitz664d0402015-06-11 15:35:48 -04001333[[capability_maintainServer]]
1334=== Maintain Server
1335
1336Allow basic, constrained server maintenance tasks, such as flushing caches and
1337reindexing changes. Does not grant arbitrary database access, read/write, or
1338ACL management permissions, as might the
1339<<capability_administrateServer,administrate server capability>>.
1340
1341Implies the following capabilities:
1342
1343* <<capability_flushCaches,Flush Caches>>
1344* <<capability_kill,Kill Task>>
1345* <<capability_runGC,Run Garbage Collection>>
1346* <<capability_viewCaches,View Caches>>
1347* <<capability_viewQueue,View Queue>>
1348
David Ostrovskyaa49e272014-07-22 00:55:47 +02001349[[capability_modifyAccount]]
1350=== Modify Account
1351
1352Allow to link:cmd-set-account.html[modify accounts over the ssh prompt].
1353This capability allows the granted group members to modify any user account
1354setting.
Fredrik Luthander46843022012-03-13 16:11:02 +01001355
1356[[capability_priority]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001357=== Priority
Fredrik Luthander46843022012-03-13 16:11:02 +01001358
1359This capability allows users to use
1360link:config-gerrit.html#sshd.batchThreads[the thread pool reserved] for
1361link:access-control.html#non-interactive_users['Non-Interactive Users'].
1362It's a binary value in that granted users either have access to the thread
1363pool, or they don't.
1364
1365There are three modes for this capability and they're listed by rising
1366priority:
1367
1368No capability configured.::
1369The user isn't a member of a group with any priority capability granted. By
1370default the user is then in the 'INTERACTIVE' thread pool.
1371
1372'BATCH'::
1373If there's a thread pool configured for 'Non-Interactive Users' and a user is
1374granted the priority capability with the 'BATCH' mode selected, the user ends
1375up in the separate batch user thread pool. This is true unless the user is
1376also granted the below 'INTERACTIVE' option.
1377
1378'INTERACTIVE'::
1379If a user is granted the priority capability with the 'INTERACTIVE' option,
1380regardless if they also have the 'BATCH' option or not, they are in the
1381'INTERACTIVE' thread pool.
1382
1383
Fredrik Luthander80ebf9d2012-02-13 09:32:43 +01001384[[capability_queryLimit]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001385=== Query Limit
Fredrik Luthander80ebf9d2012-02-13 09:32:43 +01001386
1387Allow site administrators to configure the query limit for users to
1388be above the default hard-coded value of 500. Administrators can add
David Pursehouseb5d99aaf2013-08-09 11:02:48 +09001389a global block to `All-Projects` with group(s) that should have different
1390limits.
Fredrik Luthander80ebf9d2012-02-13 09:32:43 +01001391
1392When applying a query limit to a user the largest value granted by
1393any of their groups is used.
1394
1395This limit applies not only to the link:cmd-query.html[`gerrit query`]
1396command, but also to the web UI results pagination size.
1397
1398
Shawn Pearcebb027b02013-06-10 14:35:39 -07001399[[capability_runAs]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001400=== Run As
Shawn Pearcebb027b02013-06-10 14:35:39 -07001401
Shawn Pearcef3ffd082013-06-12 11:21:35 -07001402Allow users to impersonate any other user with the `X-Gerrit-RunAs`
1403HTTP header on REST API calls, or the link:cmd-suexec.html[suexec]
1404SSH command.
1405
1406When impersonating an administrator the Administrate Server capability
1407is not honored. This security feature tries to prevent a role with
1408Run As capability from modifying the access controls in All-Projects,
1409however modification may still be possible if the impersonated user
1410has permission to push or submit changes on `refs/meta/config`. Run
1411As also blocks using most capabilities including Create User, Run
1412Garbage Collection, etc., unless the capability is also explicitly
1413granted to a group the administrator is a member of.
1414
1415Administrators do not automatically inherit this capability; it must
1416be explicitly granted.
Shawn Pearcebb027b02013-06-10 14:35:39 -07001417
1418
Edwin Kempin619169b2012-02-09 15:47:52 +01001419[[capability_runGC]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001420=== Run Garbage Collection
Edwin Kempin619169b2012-02-09 15:47:52 +01001421
1422Allow users to run the Git garbage collection for the repositories of
1423all projects.
1424
1425
Ed Bartoshd168b812013-04-13 20:15:58 +03001426[[capability_streamEvents]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001427=== Stream Events
Ed Bartoshd168b812013-04-13 20:15:58 +03001428
1429Allow performing streaming of Gerrit events. This capability
1430allows the granted group to
1431link:cmd-stream-events.html[stream Gerrit events via ssh].
1432
1433
Dave Borowitzf3548a92014-02-20 11:02:19 -08001434[[capability_viewAllAccounts]]
1435=== View All Accounts
1436
1437Allow viewing all accounts for purposes of auto-completion, regardless
1438of link:config-gerrit.html#accounts.visibility[accounts.visibility]
1439setting.
1440
1441
Fredrik Luthander9c7da662012-03-13 17:49:27 +01001442[[capability_viewCaches]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001443=== View Caches
Fredrik Luthander9c7da662012-03-13 17:49:27 +01001444
Fredrik Luthander48603002012-03-21 18:17:17 +01001445Allow querying for status of Gerrit's internal caches. This capability allows
Fredrik Luthander9c7da662012-03-13 17:49:27 +01001446the granted group to
1447link:cmd-show-caches.html[look at some or all Gerrit caches via ssh].
1448
1449
Fredrik Luthander48603002012-03-21 18:17:17 +01001450[[capability_viewConnections]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001451=== View Connections
Fredrik Luthander48603002012-03-21 18:17:17 +01001452
1453Allow querying for status of Gerrit's current client connections. This
1454capability allows the granted group to
1455link:cmd-show-connections.html[look at Gerrit's current connections via ssh].
1456
1457
Edwin Kempin362b14d12014-05-09 14:18:12 +02001458[[capability_viewPlugins]]
1459=== View Plugins
1460
1461Allow viewing the list of installed plugins.
1462
1463
Fredrik Luthander48603002012-03-21 18:17:17 +01001464[[capability_viewQueue]]
Yuxuan 'fishy' Wang61698b12013-12-20 12:55:51 -08001465=== View Queue
Fredrik Luthander48603002012-03-21 18:17:17 +01001466
1467Allow querying for status of Gerrit's internal task queue. This capability
1468allows the granted group to
1469link:cmd-show-queue.html[look at the Gerrit task queue via ssh].
1470
1471
Shawn O. Pearce5500e692009-05-28 15:55:01 -07001472GERRIT
1473------
1474Part of link:index.html[Gerrit Code Review]
Yuxuan 'fishy' Wang99cb68d2013-10-31 17:26:00 -07001475
1476SEARCHBOX
1477---------